class Solution {
    bool help(const string &s, int k)
    {
        int one = 0, zero = 0;
        for(const char &ch : s)
        {
            if(ch == '1') one++;
            if(ch == '0') zero++;
        }
        return one <= k || zero <= k;
    }
public:
    int countKConstraintSubstrings(string s, int k) {
        // 滑动窗口
        int n = s.size(), left = 0, count[2]{0}, ret = 0;
        for(int right = 0; right < n; right++)
        {
            count[s[right] - '0']++;
             while(count[0] > k && count[1] > k)
                count[s[left++] - '0']--;
            ret += right - left + 1;
        }
        return ret;




        // 暴力做法
        // int n = s.size(), ret = 0;
        // for(int i = 0; i < n; i++)
        // {
        //     for(int j = 1; j <= n - i; j++)
        //     {
        //         string t = s.substr(i, j);
        //         if(help(t, k))
        //             ret++;
        //     }
        // }
        // return ret;
    }
};